package cn.com.anypay.manager.service.auth.strategy;

import cn.com.anypay.manager.service.auth.model.AuthRequest;
import cn.com.anypay.manager.service.auth.model.AuthResult;

import jakarta.servlet.http.HttpServletRequest;

/**
 * 认证策略接口
 * 定义了认证策略的基本行为
 */
public interface IAuthStrategy {

    /**
     * 获取认证类型
     *
     * @return 认证类型标识
     */
    String getAuthType();

    /**
     * 执行认证
     *
     * @param request 认证请求
     * @param servletRequest HTTP请求
     * @return 认证结果
     */
    AuthResult authenticate(AuthRequest request, HttpServletRequest servletRequest);

    /**
     * 发送验证码
     * 默认实现抛出不支持操作异常，子类可以重写此方法
     *
     * @param identifier 标识符（手机号/邮箱等）
     * @throws UnsupportedOperationException 如果该认证策略不支持发送验证码
     */
    default void sendVerificationCode(String identifier) {
        throw new UnsupportedOperationException(
            String.format("认证类型 %s 不支持发送验证码", getAuthType()));
    }
}